Webアプリケーションをデプロイしたいけれど、サーバー管理やインフラの設定は避けたい——そんなエンジニアに最適なのがGoogle Cloud Runです。Dockerコンテナさえ用意すれば、あとはCloud Runが自動でスケーリング、HTTPS対応、ロードバランシングまで面倒を見てくれます。

💡 この記事のポイント

Cloud Runは「コンテナをサーバーレスで実行できるサービス」です。リクエストが来たときだけ課金され、トラフィックがない時はコスト0円。初心者でも15分でデプロイまで完了できます。

1. Cloud Runとは?

Cloud Runは、Googleが提供するフルマネージドなサーバーレスコンテナ実行環境です。従来のサーバーレス(Cloud Functionsなど)と異なり、任意の言語・フレームワークをコンテナとして実行できる点が大きな特徴です。

Cloud Runの主な特徴

  • サーバーレス:インフラ管理不要、リクエストベース課金
  • コンテナベース:Docker対応、言語・フレームワーク自由
  • 自動スケーリング:0から1000インスタンスまで自動調整
  • HTTPS標準:SSL証明書の自動管理
  • カスタムドメイン:独自ドメインの簡単設定

Cloud Functions vs Cloud Run

よく比較される2つのサービスの違いを整理します:

  • Cloud Functions:関数単位のデプロイ、言語制限あり、軽量処理向き
  • Cloud Run:コンテナ単位のデプロイ、言語自由、Webアプリ全般向き

2. 環境セットアップ

Cloud Runを使い始めるには、以下の準備が必要です。

前提条件

  1. Googleアカウント(GCPの無料トライアルで$300のクレジットあり)
  2. Google Cloud SDKのインストール
  3. Dockerのインストール
# Google Cloud SDKのインストール(macOS)
brew install --cask google-cloud-sdk

# 初期設定
gcloud init

# プロジェクトの作成
gcloud projects create my-cloudrun-app --name="My Cloud Run App"
gcloud config set project my-cloudrun-app

# 必要なAPIを有効化
gcloud services enable run.googleapis.com
gcloud services enable cloudbuild.googleapis.com

3. 最初のデプロイ

Node.jsの簡単なWebサーバーをCloud Runにデプロイしてみましょう。

Step 1: アプリケーションの作成

// server.js
const express = require('express');
const app = express();
const port = process.env.PORT || 8080;

app.get('/', (req, res) => {
  res.json({
    message: 'Hello from Cloud Run! 🚀',
    timestamp: new Date().toISOString(),
    version: '1.0.0'
  });
});

app.get('/health', (req, res) => {
  res.status(200).json({ status: 'healthy' });
});

app.listen(port, () => {
  console.log(`Server running on port ${port}`);
});

Step 2: Dockerfileの作成

# Dockerfile
FROM node:20-slim

WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .

EXPOSE 8080
CMD ["node", "server.js"]

Step 3: デプロイ実行

# ソースからそのままデプロイ(Dockerビルドも自動)
gcloud run deploy my-app \
  --source . \
  --region asia-northeast1 \
  --allow-unauthenticated

# デプロイ完了!URLが表示されます
# Service URL: https://my-app-xxxxx-an.a.run.app
✅ 実践のヒント

--source .オプションを使えば、Dockerfileさえあればローカルでのビルド不要です。Cloud Buildが自動でイメージをビルドしてくれます。

広告

4. 料金体系

Cloud Runの料金は使った分だけの従量課金制です。トラフィックがなければ料金は発生しません。

無料枠(毎月)

  • 200万リクエストまで無料
  • CPU:180,000 vCPU秒(約50時間)
  • メモリ:360,000 GiB秒
  • ネットワーク:北米内1GBまで無料

個人ブログやAPI程度なら、無料枠内で十分運用可能です。月間PVが数万程度のサイトでも、ほぼ無料に収まるケースが多いです。

⚠️ 注意

CPU常時割り当てモード(always-on)を使用すると、リクエストがない時間も課金されます。コスト重視の場合は、デフォルトの「リクエスト時のみ」モードを使いましょう。

5. オートスケーリング

Cloud Runの最大の魅力の一つが自動スケーリングです。トラフィックに応じてインスタンス数が自動的に調整されます。

スケーリングの仕組み

  • ゼロスケール:トラフィックがない場合、インスタンスを0まで縮小
  • 水平スケール:リクエスト増加に応じてインスタンスを追加
  • 同時実行制御:1インスタンスあたりの同時リクエスト数を制限可能
# 最小/最大インスタンス数の設定
gcloud run services update my-app \
  --min-instances 1 \          # コールドスタート回避
  --max-instances 100 \        # コスト制御
  --concurrency 80 \           # 同時リクエスト数
  --region asia-northeast1

6. 実践的なTips

コールドスタート対策

Cloud Runはゼロスケールが可能ですが、インスタンスが0の状態から起動する「コールドスタート」には数秒かかることがあります。

  • 最小インスタンスを1に設定:常に1インスタンス稼働(月額約$5〜10)
  • 軽量なベースイメージを使用node:20-slimpython:3.12-slim
  • 起動時の処理を最小化:初期化処理はリクエスト時に遅延実行

CI/CDとの連携

GitHub Actionsと組み合わせることで、pushごとに自動デプロイが可能です。

# .github/workflows/deploy.yml
name: Deploy to Cloud Run
on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: google-github-actions/auth@v2
        with:
          credentials_json: ${{ secrets.GCP_CREDENTIALS }}
      - uses: google-github-actions/deploy-cloudrun@v2
        with:
          service: my-app
          region: asia-northeast1
          source: .

Cloud Runは、「とりあえずコンテナを動かしたい」というニーズに最適なサービスです。サーバー管理の煩わしさから解放され、アプリケーション開発に集中できます。ぜひ無料枠を活用して、まずは小さなプロジェクトから試してみてください。